import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'
// import { getToken } from '@/utils/auth'

// create an axios instance
const service = axios.create({
  // 从环境变量里获取基地址
  baseURL: process.env.VUE_APP_BASE_API,
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 判断有没有token
    if (store.getters.token) {
      // 主动判断token有没有过期
      // 用发请求的时间去减去获得token的时间，得到相差的时间戳(毫秒)
      const time = Date.now() - store.state.user.tokenTime
      if (time / (1000 * 60 * 60) >= 2) {
        Message.error('登录状态过期，请重新登录')
        // 打回登录页
        store.dispatch('user/logout')
        return // 因为这里return了，所以不会往下执行代码，也就是没有return config，那就没发出请求
      }
      config.headers.Authorization = `Bearer ${store.getters.token}`
    }
    // return config代表这个请求发出去，如果不return就没发请求
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器 -- 服务器返回
service.interceptors.response.use(
  response => {
    // 而现在都是200的状态码，不会报错
    const data = response.data
    if (data.success) {
      // 数据剥离
      return data
    } else {
      Message.error(data.message)
      return Promise.reject(data.message)
    }
  },
  error => {
    if (error.response.status === 401) {
      Message.error('登录过期，请重新登录')
      // 调用一下logout
      store.dispatch('user/logout')
      // 打回登录页
      // router.push('/login')
    }
    // 因为以前会报错（响应出错，状态码不为200）
    return Promise.reject(error)
  }
)

export default service
